home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Whiteline: delta
/
whiteline CD Series - delta.iso
/
progtool
/
modula2
/
module
/
megabrai.mod
< prev
next >
Wrap
Text File
|
1995-11-25
|
3KB
|
117 lines
IMPLEMENTATION MODULE MegaBrain;
(* Version*: 20.12.89 00:44*)
FROM Timer IMPORT Start,Stop;
FROM GEMDOS IMPORT PrnOut(* CHAR *) ;
FROM SYSTEM IMPORT WORD,VAL;
VAR HalbePeriode : LONGCARD;
PROCEDURE SetFrequence(Frequenz :INTEGER);
BEGIN
HalbePeriode := 500 DIV Frequenz;
END SetFrequence;
PROCEDURE Down(EndFrequenz:INTEGER; PeriodenZuwachs:LONGCARD; status1,status2,
status01,status02:CHAR);
VAR StopUhr1, EndPeriodenDauer,Ein100telPerioden,Hundert : LONGCARD;
BEGIN
EndPeriodenDauer := 500 DIV EndFrequenz;
Hundert := 100;
Ein100telPerioden := Hundert * HalbePeriode;
Start(StopUhr1);
REPEAT
PrnOut(status1);
REPEAT
UNTIL Stop(StopUhr1) > HalbePeriode;
Start(StopUhr1);
PrnOut(status01);
REPEAT
UNTIL Stop(StopUhr1) > HalbePeriode;
Start(StopUhr1);
PrnOut(status2);
REPEAT
UNTIL Stop(StopUhr1) > HalbePeriode;
Start(StopUhr1);
PrnOut(status02);
REPEAT
UNTIL Stop(StopUhr1) > HalbePeriode;
(* Hier Uhr wieder starten damit die Zeit zum berechnen
nicht die Frequenz verfälscht !*)
Start(StopUhr1);
Ein100telPerioden:= Ein100telPerioden+PeriodenZuwachs;
HalbePeriode:= Ein100telPerioden DIV Hundert;
UNTIL EndPeriodenDauer <= HalbePeriode;
END Down;
PROCEDURE Up(EndFrequenz:INTEGER; PeriodenAbnahme:LONGCARD; status1,status2,
status01,status02:CHAR);
VAR StopUhr1, EndPeriodenDauer,Ein100telPerioden,Hundert : LONGCARD;
BEGIN
EndPeriodenDauer := 500 DIV EndFrequenz;
Hundert := 100;
Ein100telPerioden := Hundert * HalbePeriode;
Start(StopUhr1);
REPEAT
PrnOut(status1);
REPEAT
UNTIL Stop(StopUhr1) > HalbePeriode;
Start(StopUhr1);
PrnOut(status01);
REPEAT
UNTIL Stop(StopUhr1) > HalbePeriode;
Start(StopUhr1);
PrnOut(status2);
REPEAT
UNTIL Stop(StopUhr1) > HalbePeriode;
Start(StopUhr1);
PrnOut(status02);
REPEAT
UNTIL Stop(StopUhr1) > HalbePeriode;
(* *)
Start(StopUhr1);
Ein100telPerioden:= Ein100telPerioden-PeriodenAbnahme;
HalbePeriode:= Ein100telPerioden DIV Hundert;
UNTIL EndPeriodenDauer >= HalbePeriode;
END Up;
PROCEDURE Stay(Dauer:LONGCARD; status1,status2,status01,status02:CHAR);
VAR StopUhr1,StopUhr2,N1000 :LONGCARD;
BEGIN
N1000:= 1000;
Start (StopUhr2);
Start(StopUhr1);
REPEAT
PrnOut(status1);
REPEAT
UNTIL Stop(StopUhr1) > HalbePeriode;
Start(StopUhr1);
PrnOut(status01);
REPEAT
UNTIL Stop(StopUhr1) > HalbePeriode;
Start(StopUhr1);
PrnOut(status2);
REPEAT
UNTIL Stop(StopUhr1) > HalbePeriode;
Start(StopUhr1);
PrnOut(status02);
REPEAT
UNTIL Stop(StopUhr1) > HalbePeriode;
Start(StopUhr1);
UNTIL Stop(StopUhr2) > N1000*Dauer;
END Stay;
END MegaBrain.